# @Time : 2024/10/31 20:39
# @Author : Fioman 
# @Phone : 13149920693
"""
在 Python 中，模块间的循环引用是指两个或多个模块相互导入对方，从而导致引用循环。
例如，模块 A 导入模块 B，而模块 B 又导入模块 A，这样就产生了循环引用。
这种情况会导致导入失败或错误，
因为 Python 在执行模块导入时会出现冲突，无法正常加载模块的全部内容。
"""

"""
# module_a.py
import module_b

def func_a():
    print("Function A in module_a")

module_b.func_b()
"""

"""
# module_b.py
import module_a

def func_b():
    print("Function B in module_b")

module_a.func_a()
"""

# region 1. 方案1,延迟导入
"""
将循环导入的语句放在函数或方法内，
以确保导入在函数被调用时才执行，而不是在模块加载时执行。这样可以避免在模块级别产生循环引用。
"""
"""
# module_a.py
def func_a():
    print("Function A in module_a")
    import module_b  # 延迟导入
    module_b.func_b()

"""

"""
# module_b.py
import module_a

def func_b():
    print("Function B in module_b")
    module_a.func_a()
"""

# endregion

# region 2. 使用import的别名和局部导入
"""
# module_a.py
def func_a():
    print("Function A in module_a")
    from module_b import func_b  # 局部导入
    func_b()
"""
# endregion

# region 3. 使用importlib动态导入,供了一种动态加载模块的方式，
# 可以在需要时进行导入，避免模块加载时就执行导入操作。
"""
# module_a.py
import importlib

def func_a():
    print("Function A in module_a")
    module_b = importlib.import_module('module_b')
    module_b.func_b()
"""
# endregion
